import { initEdgeConfig } from './config/edgeConfig'
import { initSizeConfig } from './config/sizeConfig'
import { initDomListener } from './dom/listener'
import { initTooltip } from './dom/tooltip'
import { modules } from './module'
import { initBusShape } from './shape/bus'
import { initEdge } from './shape/edge'
import { registerBoolClickEvent } from './utils'

/**
 * 初始化
 */
function init() {
    /**
     * 1. 首先初始化每个组件的尺寸信息
     */
    initSizeConfig()
    /**
     * 2. 初始化边沿配置，如波形的长度、上升沿下降沿的持续时间等
     */
    initEdgeConfig()
    /**
     * 3. 画总线的图形，根据尺寸配置画出总线的图形
     */
    initBusShape()
    /**
     * 4. 画出上升沿和下降沿的波形图，根据边沿配置画出波形图
     */
    initEdge()

    /**
     * 5. 初始化每个组件
     */
    for (const module of modules) {
        /**
         * 5.1 初始化组件
         */
        module.init()
        /**
         * 5.2 给组件状态的图标添加点击事件，组件的状态是可以通过点击图标来切换的
         */
        // @ts-ignore
        if (module.state) {
            // @ts-ignore
            registerBoolClickEvent(module)
        }
    }

    /**
     * 6. 注册事件
     */
    initDomListener()
    /**
     * 7. 初始化tooltip
     */
    initTooltip()
}

export default init
